#include <logger\LogBroker.h>
#include <logger\LogManager.h>

#include "SpdlogSinkFactory.h"  // 直接包含工厂头文件

void test_spdlog() {
  // 1. 初始化日志框架核心
  Logging::LogManager::initialize();
  auto& broker = Logging::LogBroker::GetInstance();

  // 2. 使用 SpdlogSinkFactory 创建 Sinks
  // 创建一个彩色的控制台 Sink
  auto console_sink = Logging::SpdlogSinkFactory::CreateConsoleSink(true);

  // 创建一个文件 Sink
  Logging::SpdlogFileSinkOptions file_opts;
  file_opts.filepath = "my_spdlog_app.log";
  file_opts.max_size_mb = 10;
  file_opts.max_files = 5;
  auto file_sink = Logging::SpdlogSinkFactory::CreateFileSink(file_opts);

  // 3. 将 Sinks 注册到 LogBroker
  broker.RegisterSink(console_sink, "*");  // 控制台接收所有类别的日志
  broker.RegisterSink(file_sink,
                      "Database");  // 文件只记录 "Database" 相关的日志
  broker.RegisterSink(file_sink, "Network");  // 和 "Network" 相关的日志

  // 4. 开始使用日志
  auto db_logger = Logging::LogManager::get_logger("Database");
  auto net_logger = Logging::LogManager::get_logger("Network");
  auto ui_logger = Logging::LogManager::get_logger("UI");

  db_logger->info(
      "User 'admin' connected to database.");  // 会输出到控制台和文件
  net_logger->warn("Network latency is high: 150ms.");  // 会输出到控制台和文件
  ui_logger->debug("Button 'Login' clicked.");  // 只会输出到控制台

  // 5. 关闭
  Logging::LogManager::shutdown();  // 确保 LogBroker 处理完所有排队的消息
}
